home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Precision Software Appli…tions Silver Collection 1
/
Precision Software Applications Silver Collection Volume One (PSM) (1993).iso
/
windows
/
games
/
bjack1.exe
/
SERVER.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-19
|
6KB
|
139 lines
Function LMNetServerEnum2_L1% (Server$, VB_ServerInfo() As server_info_1, ServerType&, Domain$)
' Wrapper: LMNetServerEnum2_L1
' File: SERVER.BAS
' Purpose: Lists all servers of the specified type(s)
' that are visible in the specified domain(s).
' For example, an application can call this
' wrapper to list all domain controllers only
' or all SQL servers only.
' Data Structure: server_info_1
' Level: 1
' Associated Files: SERVER.TXT
' Parameters: Server - the name of the server on which to execute the
' command. A NULL string specifies the local computer.
' VB_ServerInfo - server_info array in which to store the
' returned data. The array will be ReDimmed to the
' required size and will be one-based.
' ServerType - specifies the type(s) of servers to enumerate.
' The ServerType is tested against the sv1_type
' element of each entry.
' Domain - contains the name of the domain in which to
' enumerate servers of the specified type(s).
' If Domain is a NULL string, servers are enumerated
' for the primary domain, logon domain, and other
' domains.
' Variables used in the NetServerEnum2 API call
Dim Level As Integer ' information level
Dim BufferPointer As Long ' pointer to LM buffer
Dim BufferSize As Integer ' buffer size
Dim Entries As Integer ' entries returned
Dim TotalAvail As Integer ' total entries available
Dim TotalAvail2 As Integer ' total entries available - 2nd call
' Other variables
Dim result As Integer ' return value for function calls
Dim result1 As Integer ' return value for LM API function
Dim result2 As Integer ' return value for EnumBufferToVBArray
Dim result3 As Integer ' return value for FreeLMBuffer
Level = 1 ' Designates information level, cannot just change this
' value to change info level - structure name and constant
' name must also be changed (server_info_1 and
' FMT_server_info_1). The function name (LMNetServerEnum2_L1)
' should also be changed.
ReDim VB_ServerInfo(0) ' set to no entries present
If ERROR_MORE_DATA = 0 Then
MsgBox "The constant ERROR_MORE_DATA is not defined and is required.", 48, "LMNetServerEnum2_L1 Error"
LMNetServerEnum2_L1 = -1
End If
Do ' Use a loop since the NetServerEnums function may be called
' multiple times if Servers are added between calls.
' This is unlikely, but could happen.
' Call NetServerEnum2 with a zero length to get the total number
' of entries available. This will be used to allocate the buffer.
result1 = NetServerEnum2(Server, Level, 0&, 0, Entries, TotalAvail, ServerType, Domain)
If result1 <> ERROR_MORE_DATA Then ' unexpected return code
LMNetServerEnum2_L1 = result1 ' set return code
Exit Function
End If
' Create LM buffer and get size in BufferSize
BufferPointer = CreateLMBuffer(FMT_server_info_1, TotalAvail, BufferSize)
If BufferPointer = 0& Then ' error, unable to allocate buffer
LMNetServerEnum2_L1 = -1
Exit Function
End If
' Call LM API function NetServerEnum2 to get data
result1 = NetServerEnum2(Server, Level, BufferPointer, BufferSize, Entries, TotalAvail, ServerType, Domain)
' check for error return
If result1 <> NERR_Success Then ' error occurred
If TotalAvail2 > TotalAvail Then ' Servers added between calls
TotalAvail = TotalAvail2
result3 = FreeLMBuffer(BufferPointer)
If result3 <> 0 Then ' error freeing LM buffer
LMNetServerEnum2_L1 = result3 ' set return for function
Exit Function
End If
ElseIf result1 = ERROR_MORE_DATA Or result1 = ERROR_NOT_ENOUGH_MEMORY Then
If BufferSize = &HFFFF Then
' More data than LAN Manager can return - take what we have.
Exit Do
End If
Else ' error, return the error
LMNetServerEnum2_L1 = result1 ' set return for function
result3 = FreeLMBuffer(BufferPointer) ' free the memory
Exit Function
End If
Else
Exit Do ' completed successfully, exit Do loop
End If
Loop ' end Do loop
If Entries = 0 Then ' no servers gotten
result3 = FreeLMBuffer(BufferPointer) ' free LM buffer
If result1 <> NERR_Success Then
LMNetServerEnum2_L1 = result1
Else
LMNetServerEnum2_L1 = result3
End If
Exit Function
End If
' Set # of entries for user_info array (one-based)
ReDim VB_ServerInfo(1 To Entries)
' Copy data from LM buffer to user_info array
result2 = EnumBufferToVBArray(VB_ServerInfo(1), Len(VB_ServerInfo(1)), BufferPointer, BufferSize, FMT_server_info_1, Entries)
result3 = FreeLMBuffer(BufferPointer) ' free LM buffer
' check if any errors to return
If result1 <> NERR_Success Then
LMNetServerEnum2_L1 = result1
ElseIf result2 <> NERR_Success Then
LMNetServerEnum2_L1 = result2
Else
LMNetServerEnum2_L1 = result3
End If
End Function